package com.lcw.view.jpush;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;

import com.lcw.view.Message.RefreshMessage;

import org.greenrobot.eventbus.EventBus;
import org.json.JSONException;
import org.json.JSONObject;

import java.util.Iterator;

import cn.jpush.android.api.JPushInterface;

/**
 * 自定义接收器
 * 
 * 如果不定义这个 Receiver，则：
 * 1) 默认用户会打开主界面
 * 2) 接收不到自定义消息
 */
public class MyReceiver extends BroadcastReceiver {
	private static final String TAG = "JIGUANG-Example";

	@Override
	public void onReceive(Context context, Intent intent) {

		Bundle bundle = intent.getExtras();
		Log.d(TAG, "[JPushReceiver] onReceive - " + intent.getAction() + ", extras: " + printBundle(bundle));

		if (JPushInterface.ACTION_REGISTRATION_ID.equals(intent.getAction())) {
			String regId = bundle != null ? bundle.getString(JPushInterface.EXTRA_REGISTRATION_ID) : "";
			Log.d(TAG, "[JPushReceiver] 接收Registration Id : " + regId);
			//send the Registration Id to your server...

		} else if (JPushInterface.ACTION_MESSAGE_RECEIVED.equals(intent.getAction())) {
			intent.setClass(context,JPushService.class);
			context.startService(intent);
			Log.d(TAG, "[JPushReceiver] 接收到推送下来的自定义消息: " + (bundle != null ? bundle.getString(JPushInterface.EXTRA_MESSAGE) : ""));

		} else if (JPushInterface.ACTION_NOTIFICATION_RECEIVED.equals(intent.getAction())) {
			Log.d(TAG, "[JPushReceiver] 接收到推送下来的通知");
			int notifactionId = bundle != null ? bundle.getInt(JPushInterface.EXTRA_NOTIFICATION_ID) : -1;
			Log.d(TAG, "[JPushReceiver] 接收到推送下来的通知的ID: " + notifactionId);

			try {
				JSONObject json = new JSONObject(bundle != null ? bundle.getString(JPushInterface.EXTRA_EXTRA) : "{}");

               if (!json.isNull("isSuccess")) {
                    String push_type = json.getString("isSuccess");
                    if ("true".equals(push_type)) {
                        EventBus.getDefault().post(new RefreshMessage(push_type, ""));
                    }
                }

			} catch (JSONException e) {
				e.printStackTrace();
			}
		} else if (JPushInterface.ACTION_NOTIFICATION_OPENED.equals(intent.getAction())) {
			Log.d(TAG, "[JPushReceiver] 用户点击打开了通知");
			Intent intent1 = new Intent(context, TestActivity.class);  //自定义打开的界面
			intent1.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
			context.startActivity(intent1);
			//打开自定义的Activity
            /*try {
                JSONObject json = new JSONObject(bundle != null ? bundle.getString(JPushInterface.EXTRA_EXTRA) : "{}");
                if (!json.isNull("type")) {
                    String push_type = json.getString("type");
                    *//*switch (push_type) {
                        case "MSG":
                        case "SYS":
                        case "VIP":
                        case "TX":
                            intent = new Intent(context, MessageActivity.class);
                            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                            context.startActivity(intent);
                            break;
                        case "ORDER":
                            break;
                    }*//*
                }
            } catch (JSONException e) {
                e.printStackTrace();
            }*/
		} else if (JPushInterface.ACTION_RICHPUSH_CALLBACK.equals(intent.getAction())) {
			Log.d(TAG, "[JPushReceiver] 用户收到到RICH PUSH CALLBACK: " + (bundle != null ? bundle.getString(JPushInterface.EXTRA_EXTRA) : ""));
			//在这里根据 JPushInterface.EXTRA_EXTRA 的内容处理代码，比如打开新的Activity， 打开一个网页等..

		} else if(JPushInterface.ACTION_CONNECTION_CHANGE.equals(intent.getAction())) {
			boolean connected = intent.getBooleanExtra(JPushInterface.EXTRA_CONNECTION_CHANGE, false);
			Log.w(TAG, "[JPushReceiver]" + intent.getAction() +" connected state change to "+connected);
		} else {
			Log.d(TAG, "[JPushReceiver] Unhandled intent - " + intent.getAction());
		}
	}

	// 打印所有的 intent extra 数据
	private static String printBundle(Bundle bundle) {
		StringBuilder sb = new StringBuilder();
		for (String key : bundle.keySet()) {
			switch (key) {
				case JPushInterface.EXTRA_NOTIFICATION_ID:
					sb.append("\nkey:").append(key).append(", value:").append(bundle.getInt(key));
					break;
				case JPushInterface.EXTRA_CONNECTION_CHANGE:
					sb.append("\nkey:").append(key).append(", value:").append(bundle.getBoolean(key));
					break;
				case JPushInterface.EXTRA_EXTRA:
					if (bundle.getString(JPushInterface.EXTRA_EXTRA).isEmpty()) {
						Log.i(TAG, "This message has no Extra data");
						continue;
					}

					try {
						JSONObject json = new JSONObject(bundle.getString(JPushInterface.EXTRA_EXTRA));
						Iterator<String> it = json.keys();

						while (it.hasNext()) {
							String myKey = it.next();
							sb.append("\nkey:").append(key).append(", value: [").append(myKey).append(" - ").append(json.optString(myKey)).append("]");
						}
					} catch (JSONException e) {
						Log.e(TAG, "Get message extra JSON error!");
					}

					break;
				default:
					sb.append("\nkey:").append(key).append(", value:").append(bundle.getString(key));
					break;
			}
		}
		return sb.toString();
	}
}
